package org.example.backend.mapper;

import org.example.backend.dto.PolicyInfoDTO;
import org.example.backend.entity.PolicyInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface PolicyInfoMapper {
    // 分页多条件查询
    List<PolicyInfoDTO> selectPoliciesByPage(
        @Param("keyword") String keyword,
        @Param("category") String category,
        @Param("department") String department,
        @Param("region") String region,
        @Param("dateFrom") String dateFrom,
        @Param("dateTo") String dateTo,
        @Param("tags") List<String> tags,
        @Param("status") String status,
        @Param("sortBy") String sortBy,
        @Param("sortOrder") String sortOrder,
        @Param("size") int size,
        @Param("offset") int offset
    );

    int countPolicies(
        @Param("keyword") String keyword,
        @Param("category") String category,
        @Param("department") String department,
        @Param("region") String region,
        @Param("dateFrom") String dateFrom,
        @Param("dateTo") String dateTo,
        @Param("tags") List<String> tags,
        @Param("status") String status
    );
    // 主表policy_content_table，主键policy_id
    List<PolicyInfo> selectAll();

    // 详情查询，联合标签/行业/地区表
    /**
     * 详情查询，联合标签/行业/地区表
     * MyBatis XML 映射已定义 selectById，直接用 selectById 即可
     */
    PolicyInfo selectById(String policyId);

    // 列表查询
    List<PolicyInfo> getAllPolicies();

    // 多条件筛选接口
    List<PolicyInfoDTO> filterPolicies(
        @Param("keyword") String keyword,
        @Param("category") String category,
        @Param("department") String department,
        @Param("region") String region,
        @Param("dateFrom") String dateFrom,
        @Param("dateTo") String dateTo,
        @Param("tags") List<String> tags,
        @Param("status") String status
    );

    // 模糊查询
    List<PolicyInfo> fuzzySearchPolicies(@Param("keyword") String keyword);

    // AI相关内容、脑图、AI解读等字段，参数类型统一为String policyId - 现在从 policy_ai_content_table 表查询
    String getFlowchartJsonById(@Param("policyId") String policyId);
    void updateFlowchartJson(@Param("policyId") String policyId, @Param("flowchartJson") String flowchartJson);
    String getAISummaryById(@Param("policyId") String policyId);
    void updateAISummary(@Param("policyId") String policyId, @Param("aiSummary") String aiSummary);
    void updateMindmapTimeJson(@Param("policyId") String policyId, @Param("mindmapTimeJson") String mindmapTimeJson);
    void updateMindmapSpaceJson(@Param("policyId") String policyId, @Param("mindmapSpaceJson") String mindmapSpaceJson);
    void updateMindmapThemeJson(@Param("policyId") String policyId, @Param("mindmapThemeJson") String mindmapThemeJson);

    // 三种脑图维度读取
    String getMindmapTimeJsonById(@Param("policyId") String policyId);
    String getMindmapSpaceJsonById(@Param("policyId") String policyId);
    String getMindmapThemeJsonById(@Param("policyId") String policyId);
    
    // 新增：确保AI内容记录存在
    void insertAIContentIfNotExists(@Param("policyId") String policyId);

    /**
     * 查询政策库真实总数
     */
    @Select("SELECT COUNT(*) FROM policy_content_table")
    int countAllPolicies();
}
